﻿/*
 * Created by SharpDevelop.
 * User: CrOnO
 * Date: 20/11/2011
 * Time: 01:03 a.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
using Business_Logic;
using Business_Entity;
using System.IO;

namespace PetSoft.GUI.Clinica
{
	/// <summary>
	/// Description of GUIEditarLineaPedidoVentaServicio.
	/// </summary>
	public partial class GUIEditarLineaPedidoVentaServicio : Form
	{
		BELineaPedidoServicio lineaPedidoServicioBE;
		List<BEEmpleado> empleadoLST;
		List<BEEstadoAtencion> estadoAtencionLST;
		DateTime fechaDT;
		int hayProxcita;
        byte cargoArchivo;/*0=no cargó/1=cargó*/
        bool yaDescargo;
        BLLineaPedidoVentaServicio lineaPedidoVentaServicioBL;
        
        
        
        
        
        
        public GUIEditarLineaPedidoVentaServicio(BELineaPedidoServicio lineaPedidoServicioBE)
		{
			try
			{
				//
				// The InitializeComponent() call is required for Windows Forms designer support.
				//
				InitializeComponent();
				this.proxCitaDTP.MinDate = DateTime.Now;
				this.hayProxcita = 0; //0 = no, 1= si
				this.lineaPedidoServicioBE = lineaPedidoServicioBE;
                this.cargoArchivo = 0; //falso
                this.yaDescargo = false;
                this.openFileDialog1.FileName = "";
                this.lineaPedidoVentaServicioBL = new BLLineaPedidoVentaServicio();
				/*
                //prueba
                this.lineaPedidoServicioBE.Estado = new BEEstadoAtencion();
                this.lineaPedidoServicioBE.Estado.IdEstado = 1;
                this.lineaPedidoServicioBE.Estado.Descripcion = "Activo";
                this.lineaPedidoServicioBE.Mascota = new BEMascota();
                this.lineaPedidoServicioBE.Empleado = new BEEmpleado();
                this.lineaPedidoServicioBE.Tienda = new BETienda();
                this.lineaPedidoServicioBE.Servicio = new BEServicio();
                this.lineaPedidoServicioBE.Descuento = new BEDescuento();

                //finprueba
                */
				//
				// TODO: Add constructor code after the InitializeComponent() call.
				//
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: "+ex,"Error");
			}
		}

		void HayProxCitaCheckedChanged(object sender, EventArgs e)
		{
			try
			{
				if (hayProxCita.Checked == false)
				{
					this.proxCitaDTP.Enabled = false;
				}
				else if (hayProxCita.Checked == true)
				{
					this.proxCitaDTP.Enabled = true;
				}
			}
			catch
			{
			}
		}
		
				
		void AceptarBTNClick(object sender, EventArgs e)
		{
            int error = 0;
            string mensajeError = "";
			try
			{
                if (MessageBox.Show("¿Esta seguro que quiere confirmar la actualizacion de la linea pedido servicio?","Pregunta",MessageBoxButtons.YesNo,MessageBoxIcon.Question)== DialogResult.Yes) this.Close();
                {
                    if (estadoCB.Text == "<Seleccionar>")
                    {
                        String mensaje = "Falta ingresar los siguientes datos: \r\n" + "\r\n Estado";
                        MessageBox.Show(mensaje, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else
                    {


                        this.lineaPedidoServicioBE.Observaciones = this.obsTB.Text;
                        this.lineaPedidoServicioBE.Estado = estadoAtencionLST.Find(delegate(BEEstadoAtencion est)
                                                    {
                                                        return est.Descripcion == this.estadoCB.Text;
                                                    });
                        if (this.cargoArchivo == 1)
                        {
                            this.lineaPedidoServicioBE.Archivo = this.lineaPedidoServicioBE.Archivo;
                            this.lineaPedidoServicioBE.NomArchivo = this.lineaPedidoServicioBE.NomArchivo;
                        }


                        this.lineaPedidoVentaServicioBL.actualizarLineaPedidoVentaServicio_clinica(this.lineaPedidoServicioBE, cargoArchivo, ref error, ref mensajeError);

                        if (error == 0)
                        {
                            MessageBox.Show("El registro Linea Pedido Servicio se actualizó en el sistema.", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("Error " + error + ". " + mensajeError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
			}
			catch (Exception ex)
			{
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}
		
		
        
        
        
        
        
        
        void GUIEditarLineaPedidoVentaServicioLoad(object sender, EventArgs e)
		{
			try
			{
				if (this.lineaPedidoServicioBE.Mascota != null)
					this.mascotaTB.Text = this.lineaPedidoServicioBE.Mascota.Nombre;
				if (this.lineaPedidoServicioBE.Servicio != null)
				{
					this.servicioTB.Text = this.lineaPedidoServicioBE.Servicio.Descripcion;
					BLEmpleado blEmp = new BLEmpleado();
					List<BEEmpleado> listEmp = blEmp.buscarEmpleadoDadoServicio(this.lineaPedidoServicioBE.Servicio);
					if (listEmp != null)
	        		{
						this.empleadoLST = listEmp;
	          			for(int i=0; i<listEmp.Count; i++)
	          				this.empleadoCB.Items.Add(listEmp[i].Nombre + " " + listEmp[i].ApPaterno + " " + listEmp[i].ApMaterno);
	          			if (this.lineaPedidoServicioBE.Empleado != null)
	          				this.empleadoCB.Text = this.lineaPedidoServicioBE.Empleado.Nombre + " " + this.lineaPedidoServicioBE.Empleado.ApPaterno + " " + this.lineaPedidoServicioBE.Empleado.ApMaterno;
	          			else 
	          				this.empleadoCB.Text = "<Seleccionar>";
	        		}
				}
				//this.fechaDTP.Value = this.fecha;
				
				BLEstadoAtencion estadoAtencionBL = new BLEstadoAtencion();
				this.estadoAtencionLST = estadoAtencionBL.obtEstadoAtencion();
				
				if (this.estadoAtencionLST != null)
	        	{
                    this.estadoCB.DataSource = this.estadoAtencionLST;
                    this.estadoCB.ValueMember = "idEstado";
                    this.estadoCB.DisplayMember = "descripcion";
                    if (this.lineaPedidoServicioBE.Estado.IdEstado == 0 || this.lineaPedidoServicioBE.Estado.IdEstado == null)
                        this.estadoCB.SelectedValue = -1;
                    else
                        this.estadoCB.SelectedValue = this.lineaPedidoServicioBE.Estado.IdEstado;
	        	}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Error: "+ex,"Error");
			}
		}
		

        
        
        
        
        
        
        private void ExplorarBTN_Click(object sender, EventArgs e)
        {
            string rutaArchivo = "";
            this.openFileDialog1.InitialDirectory = "c:\\";
            this.openFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
            this.openFileDialog1.FilterIndex = 2;
            this.openFileDialog1.RestoreDirectory = true;
            this.openFileDialog1.FileName = "";
            //MessageBox.Show(openFileDialog1.FileName);  
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)  rutaArchivo = this.openFileDialog1.FileName;

            if (rutaArchivo != "")
            {
                FileStream flujoArch = new FileStream(rutaArchivo, FileMode.Open, FileAccess.Read);
                /*Si intento subir un archivo mayor al permitido, va a salir una error. Fija  varbinary(max) al campo del archivo, para que puedas
                         subir hasta 1 GB. En SqlServer o fijas el varbinary hasta un maximo de 8Kb aprox. o lo fijas en max. Creo que 
                         deberia validar por este codigo que el usuario no suba un archivo de mas de 2MB.*/
                if (flujoArch.Length <= 1024 * 1024 * 2)
                {
                    BinaryReader binarioRDR = new BinaryReader(flujoArch);
                    /*Esta es la estructura final en el programa donde se guarda el archivo.*/
                    byte[] archivo = binarioRDR.ReadBytes((int)(flujoArch.Length));

                    /*Seria bueno que el nombre del archivo siguiese un  standar de nombramiento y creo que deberia ser definido al momento
                     de crear el archivo con alguna herramienta. Por ejemplo se podria decir que vaya primero el idCliente, luego el idPedidVenta, y asi*/
                    string[] arregloCadenas = rutaArchivo.Split(new char[] { '\\' });
                    string nomArch = arregloCadenas[arregloCadenas.Length - 1];
                    this.lineaPedidoServicioBE.Archivo = archivo;
                    this.lineaPedidoServicioBE.NomArchivo = nomArch;
                    this.cargoArchivo = 1;
                    //MessageBox.Show(nomArch);
                    flujoArch.Close();
                    binarioRDR.Close();
                    this.rutaArchTB.Text = rutaArchivo;
                }
                else MessageBox.Show("No se pudo cargar el archivo. Se excedio el límite de 2MB para el tamañao de archivo", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else MessageBox.Show("No ha seleccionado ningun archivo para subir.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        
        
        
         
        
        
        
        
        private void descargarBTN_Click(object sender, EventArgs e)
        {
            FileStream flujoArch;
            string  mensajeError = "";
            int error = 0;
            //this.lineaPedidoServicioBE.Id = 8; //prueba
            if (this.yaDescargo == false)
            {
                this.lineaPedidoVentaServicioBL.descargarArchivoLineaServicio(this.lineaPedidoServicioBE, ref error, ref mensajeError);
                this.yaDescargo = true;
            }
            if (error == 0 && this.yaDescargo == true)
            {
                SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                saveFileDialog1.InitialDirectory = "c:\\";
                // saveFileDialog1.ShowDialog();
                try
                {
                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                    {

                        /*En este modo, arroja una excepcion manifiesta luego en una ventana de pregunta si el archivo ya existe. El in
                            conveniente es que sale en ingles.*/
                        /*Si quieres podrias guardarlo con el mismo nombre de la BD, que esta en la variable nomArch*/
                        flujoArch = new FileStream(saveFileDialog1.FileName, FileMode.CreateNew);
                        flujoArch.Write(lineaPedidoServicioBE.Archivo, 0, lineaPedidoServicioBE.Archivo.Length);
                        flujoArch.Close();
                    }
                }

                catch (Exception ex)
                {
                    //MessageBox.Show("El archivo: " + this.saveFileDialog1.FileName + " ya existe. Desea reemplazarlo?","Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    //MessageBox.Show(ex.ToString());
                }
            }
            else MessageBox.Show("Error " + error + ". " + mensajeError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void cancelarBTN_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Esta seguro que quiere cancelar la actualizacion de la linea pedido servicio?","Pregunta",MessageBoxButtons.YesNo,MessageBoxIcon.Question)== DialogResult.Yes) this.Close();
        }

        
        
        
        
        
        private void limpiarBTN_Click(object sender, EventArgs e)
        {
            this.rutaArchTB.Text = "";
            this.lineaPedidoServicioBE.Archivo = null;
            this.lineaPedidoServicioBE.NomArchivo = "";
            this.cargoArchivo = 0;
        }

	}
}
